<?php 
namespace frontend\models;

use yii\base\Model;
use common\models\TagsModel;
use yii\base\Exception;

class TagForm extends Model
{
    public $id;
    
    public $tags;
    
    public function rules()
    {
        return [
            ['tags', 'required'],
            ['tags', 'each', 'rule' => ['string']],
        ];
    }
    
    /**
     * 将输入的标签 tags保存到数据库表 tags 的操作
     * $tag->tags = $event->data['tags']; 也就是 $this->tags
     * 输入的标签标签可能有多个，因此要进行遍历输出
     * @return number[] 返回ids以便我们在 foreach($tagids as $k=>$id) 对其进行使用，并保存到关联表中的 tags_id字段
     */
    public function saveTags()
    {
        $ids = [];
        if (!empty($this->tags)) {
            foreach ($this->tags as $tag) {
                $ids[] = $this->_saveTag($tag);
            }
        }
        
        return $ids;
    }
    
    /**
     * 保存标签的操作调用这个私有方法，该方法返回一个id，分情况对标签进行添加 或者+1的操作
     * 如果tags表里面没有相同名称的标签，即 $model->tag_name = $tag;则添加进去并保存
     * 如果已经存在同名的标签，则在原有的基础上加1
     * @param unknown $tag
     * @throws Exception
     * @return number savaTags()方法需要返回一个id
     */
    private function _saveTag($tag)
    {
        $model = new TagsModel();
        $res = $model->find()->where(['tag_name' => $tag])->one();
        if (!$res) {
            $model->tag_name = $tag;
            $model->art_num = 1;
            $model->save();
            return $model->id;
        } else {
            $res->updateCounters(['art_num' => 1]);
        }
        
        return $res->id;
    }
}